package com.westvalley.common.kit;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateKit {
	
	/**
	 * 日期转换
	 * @param str
	 * @return
	 */
	public static java.util.Date getDate(String str){
		return getDate(str,getDateFormatStr(str));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.util.Date getDate(String str,String format){
		java.util.Date date = null;
		if( !"".equals(StringKit.null2Str(str)) && !"".equals(StringKit.null2Str(format)) ){
			SimpleDateFormat sdf = new SimpleDateFormat(format);  
			try {
				date = sdf.parse(str);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return date;
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Date getSqlDate(String str){
		return getSqlDate(getDate(str));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Date getSqlDate(String str,String format){
		return getSqlDate(getDate(str,format));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Date getSqlDate(java.util.Date date){
		if( date!=null ){
			return new java.sql.Date(date.getTime());
		}
		return null;
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Time getTime(String str){
		return getTime(getDate(str));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Time getTime(String str,String format){
		return getTime(getDate(str,format));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Time getTime(java.util.Date date){
		if( date!=null ){
			return new java.sql.Time(date.getTime());
		}
		return null;
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Timestamp getTimestamp(String str){
		return getTimestamp(getDate(str));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Timestamp getTimestamp(String str,String format){
		return getTimestamp(getDate(str,format));
	}
	
	/**
	 * 日期转换
	 * @param str
	 * @param format
	 * @return
	 */
	public static java.sql.Timestamp getTimestamp(java.util.Date date){
		if( date!=null ){
			return new java.sql.Timestamp(date.getTime());
		}
		return null;
	}
	
	/**
	 * 获取标准日期格式
	 * @param str
	 * @return
	 */
	public static String getDateFormatStr(String str){
		String strFormat = "yyyy-MM-dd HH:mm:ss.SSS";
		if( !StringKit.isBlank(str) ){
			if(str.length()==4){
				strFormat = "yyyy";
			}else if(str.length()==6){
				strFormat = "yyyyMM";
			}else if(str.length()==7){
				strFormat = "yyyy-MM";
			}else if(str.length()==8){
				strFormat = "yyyyMMdd";
			}else if(str.indexOf("-")>0 && str.length()==10){
				strFormat = "yyyy-MM-dd";
			}else if(str.length()==10){
				strFormat = "yyyyMMddHH";
			}else if(str.length()==12){
				strFormat = "yyyyMMddHHmm";
			}else if(str.length()==13){
				strFormat = "yyyy-MM-dd HH";
			}else if(str.length()==14){
				strFormat = "yyyyMMddHHmmss";
			}else if(str.length()==16){
				strFormat = "yyyy-MM-dd HH:mm";
			}else if(str.length()==19){
				strFormat = "yyyy-MM-dd HH:mm:ss";
			}
		}
		return strFormat;
	}
	
	/**
	 * 当天的开始时间
	 * 
	 * @return
	 */
	public static Date startOfTodDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}
	
	/**
	 * 当天的结束时间
	 * 
	 * @return
	 */
	public static Date endOfTodDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		calendar.set(Calendar.MILLISECOND, 999);
		return calendar.getTime();
	}
	
	/**
	 * 获取昨天日期
	 */
	public static Date getYesterday(){
		return getYesterday(new Date());
	}
	
	public static Date getYesterday(Date date){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DATE,-1);
		return cal.getTime();
	}
	
	public static Date getYesterday(String date){
		return getYesterday(getDate(date));
	}
	
	
	/**
	 * 日期加减
	 * @param format 日期格式
	 * @param StrDate 输入日期
	 * @param year 添加年
	 * @param month 添加月
	 * @param day  添加日
	 * @param hour  添加小时
	 * @return	日期
	 */
	public static Date getDate(String format,String StrDate,int year,int month,int day,int hour){
		SimpleDateFormat sFmt = new SimpleDateFormat(format); 
		Date date = null;
		try{
			date = getDate(sFmt.parse(StrDate),year,month,day,hour);
		}catch ( Exception e ){
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * 日期加减
	 * @param date 日期对象
	 * @param year 添加年
	 * @param month 添加月
	 * @param day  添加日
	 * @param hour  添加小时
	 * @return	日期
	 */
	public static Date getDate(Date date,int year,int month,int day,int hour){
		Calendar cal = Calendar.getInstance();
		Date dateTime = null;
		if( date!= null ){
			cal.setTime(date);
			if(day!=0)
				cal.add(Calendar.DATE,day); 
			if(month!=0)
				cal.add(Calendar.MONTH,month);
			if(year!=0)
				cal.add(Calendar.YEAR,year); 
			if(hour!=0)
				cal.add(Calendar.HOUR,hour); 
			dateTime = cal.getTime();
		}
		return dateTime;
	}
	
	
	public static void main(String[] args) {
		System.out.println("yyyyMMddHH".length());
	}
}
